#!/bin/bash
# fprintd 开发环境设置脚本

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# 日志函数
log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

log_warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检测发行版
detect_distro() {
    if [ -f /etc/os-release ]; then
        . /etc/os-release
        DISTRO=$ID
        VERSION=$VERSION_ID
    else
        log_error "无法检测 Linux 发行版"
        exit 1
    fi
    
    log_info "检测到发行版: $DISTRO $VERSION"
}

# 安装 Ubuntu/Debian 依赖
install_ubuntu_deps() {
    log_info "安装 Ubuntu/Debian 依赖包..."
    
    sudo apt update
    sudo apt install -y \
        build-essential \
        meson \
        ninja-build \
        pkg-config \
        libglib2.0-dev \
        libfprint-2-dev \
        libpam0g-dev \
        libsystemd-dev \
        libdbus-1-dev \
        libpolkit-gobject-1-dev \
        gettext \
        gtk-doc-tools \
        python3-gi \
        python3-dbusmock \
        dbus-x11 \
        valgrind \
        gdb \
        strace
        
    log_info "Ubuntu/Debian 依赖安装完成"
}

# 安装 Fedora 依赖
install_fedora_deps() {
    log_info "安装 Fedora 依赖包..."
    
    sudo dnf install -y \
        gcc \
        meson \
        ninja-build \
        pkgconfig \
        glib2-devel \
        libfprint-devel \
        pam-devel \
        systemd-devel \
        dbus-devel \
        polkit-devel \
        gettext-devel \
        gtk-doc \
        python3-gobject \
        python3-dbusmock \
        dbus-x11 \
        valgrind \
        gdb \
        strace
        
    log_info "Fedora 依赖安装完成"
}

# 安装 Arch Linux 依赖
install_arch_deps() {
    log_info "安装 Arch Linux 依赖包..."
    
    sudo pacman -S --needed \
        base-devel \
        meson \
        ninja \
        pkgconf \
        glib2 \
        libfprint \
        pam \
        systemd \
        dbus \
        polkit \
        gettext \
        gtk-doc \
        python-gobject \
        python-dbusmock \
        valgrind \
        gdb \
        strace
        
    log_info "Arch Linux 依赖安装完成"
}

# 设置开发环境
setup_dev_env() {
    log_info "设置开发环境..."
    
    # 添加用户到 plugdev 组
    if getent group plugdev > /dev/null; then
        sudo usermod -a -G plugdev $USER
        log_info "用户 $USER 已添加到 plugdev 组"
        log_warn "请注销并重新登录以使组设置生效"
    fi
    
    # 创建构建目录
    if [ ! -d "builddir" ]; then
        meson setup builddir --buildtype=debug
        log_info "创建调试构建目录"
    else
        log_warn "构建目录已存在"
    fi
    
    # 编译项目
    log_info "编译项目..."
    meson compile -C builddir
    
    # 运行测试
    log_info "运行测试..."
    meson test -C builddir || log_warn "某些测试失败，请检查"
    
    log_info "开发环境设置完成！"
}

# 主函数
main() {
    log_info "开始设置 fprintd 开发环境..."
    
    # 检查是否在 fprintd 目录中
    if [ ! -f "meson.build" ] || ! grep -q "fprintd" meson.build; then
        log_error "请在 fprintd 项目根目录中运行此脚本"
        exit 1
    fi
    
    detect_distro
    
    case $DISTRO in
        ubuntu|debian)
            install_ubuntu_deps
            ;;
        fedora|rhel|centos)
            install_fedora_deps
            ;;
        arch|manjaro)
            install_arch_deps
            ;;
        *)
            log_error "不支持的发行版: $DISTRO"
            log_info "请手动安装依赖，参考 DEVELOPMENT.md"
            exit 1
            ;;
    esac
    
    setup_dev_env
    
    log_info "设置完成！请阅读 DEVELOPMENT.md 了解更多开发信息"
    log_info "快速开始：查看 QUICK_START.md"
}

# 运行主函数
main "$@"
